    /**
     * 
     * Fonction javascript générales utilisées par toutes les vues
     * 
     * 
     * 
     */
    
    
    
    
    
    //Fonctions de récupération / renvoi d'info via AJAX
    /*
    function outputResponse(loader){
            if(loader.xmlDoc.responseXML!=null)
                    alert("We Got Response\n\n"+loader.doSerialization());
            else
                    alert("Response contains no XML\n\n"+loader.xmlDoc.responseText);
    }

    function sendRequestPost(formName){                
            paramsURI = 'action=' + formName + '&' + document.getElementById('params').value;
            var loader = dhtmlxAjax.postSync(ajaxCallbackFunction,encodeURI(paramsURI));
            outputResponse(loader);				
    }
    */

    //Création d'une DIV pour les contôles (spreadsheet, grille) rattachée au wrapper du template,
    /*
    function attachControlBox(controlId, parentid) {
            var spreadsheetDiv = document.getElementById(controlId);
            var parentDiv = document.getElementById(parentid);	
            parentDiv.appendChild(spreadsheetDiv);			
    }	
    */

   
    //Fonctions relatives aux listes de choix
    function remplirListe(lst, values, selectItem)
    {
            selectItem = (typeof selectItem === "undefined") ? -1 : selectItem;

            for (var i=0; i < values.length;++i){
                    //si la valeur est elle même un tableau, cela doit être un tableau associatif contenant 'id', 'libelle' et 'code'
                    if (values[i] !== null && typeof values[i] === 'object') {
                        myId = values[i]['id'];
                        myLibelle = values[i]['libelle'];
                        myCode = values[i]['code'];  
                    } else {
                        myId = values[i];
                        myLibelle = values[i];
                        myCode = values[i];
                    }			

                    var newOption = document.createElement("OPTION");
                    newOption.text = myLibelle;
                    newOption.value = myCode;
                    newOption.id = myId;
                    lst.options.add(newOption);			
            }

            if (selectItem === -1){
                lst.value="";
            } else {
                lst.selectedIndex = selectItem;
            }
    }

//Recherche d'éléments HTML par un attribut
function getElementsByAttributes(elementTag, attributesList, myDocument)
//attributes is an array of key-values pairs
//var res = getElementsByAttribute('p',[['id','myID'],['class','myClass']]);
{		
    if (!myDocument) myDocument = document;
    var nodeList = myDocument.getElementsByTagName(elementTag);
    var nodeArray = [];

    for (var i = 0;i<nodeList.length; i++) 
    {
        nodeStillOK = true;
        for (var j = 0;j<attributesList.length;j++)
        {
            if (nodeList[i].getAttribute(attributesList[j][0]))
            {
                if (nodeList[i].getAttribute(attributesList[j][0]) != attributesList[j][1])
                {
                    nodeStillOK = false;
                }
            } else {
                nodeStillOK = false;
            }
        }

        if (nodeStillOK == true)
        {
            nodeArray.push(nodeList[i]);
        }
    }

    return nodeArray;
};

//fonction verifiant qu'une variable existe
function isset() {

  var a = arguments,

    l = a.length,

    i = 0,

    undef;

 

  if (l === 0) {

    throw new Error('Empty isset');

  }

 

  while (i !== l) {

    if (a[i] === undef || a[i] === null) {

      return false;

    }

    i++;

  }

  return true;

}